def bitonic_sort(arr, low, hi, n, direction):
    if n == 1:  # 基线条件：如果序列长度为1，则已经是有序的
        return arr

    # 将数组划分为两半，并递归地进行排序
    left = bitonic_sort(arr, low, hi, n//2, 1)  # 对前半部分进行升序排序
    right = bitonic_sort(arr, hi, n, n//2, 0)  # 对后半部分进行降序排序

    # 合并两个已排序的子序列
    for i in range(0,  n - 1):
        if (direction * (i < n // 2)) > (arr[i] > arr[i + n // 2]):
            swap(arr, i, i + n // 2)

    return arr

def swap(a, i, j):
    a[i], a[j] = a[j], a[i]
    
# 调用示例
arr = [5, 3, 6, 2, 10, 8, 7, 1]
sorted_arr = bitonic_sort(arr, 0, len(arr)-1,  len(arr), 1)